package main

func main() {
	root := &TreeNode{
		Val: 8,
		Left: &TreeNode{
			Val:   -70,
			Left:  nil,
			Right: nil,
		},
		Right: &TreeNode{
			Val:   81,
			Left:  nil,
			Right: nil,
		},
	}
	println(isValidBST(root))
}

// 搜索树：左节点小于root，右节点大于root。而且左边所有的值都要小于root值，右边所有节点值都大于根节点值
// 老规矩，我做树的题目，只会用递归，其他的不会....真是个菜逼
func isValidBST(root *TreeNode) bool {

	pre := -1<<31 - 1
	var doValid func(node *TreeNode) bool

	doValid = func(node *TreeNode) bool {

		if node == nil {
			return true
		}

		// 遍历左子数
		if !doValid(node.Left) {
			return false
		}

		// 遍历当前数
		if node.Val <= pre {
			return false
		}
		pre = node.Val

		return doValid(node.Right)

	}

	return doValid(root)

}

type TreeNode struct {
	Val   int
	Left  *TreeNode
	Right *TreeNode
}
